#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/8/3
# @Author  : LiJun
# @Email   : lijun@tianyancha.com
# @Version : 1.0.0

import logging
import os.path
import time
from typing import List
from conf import config as cf


def pytest_collection_modifyitems(session: "Session", config: "Config", items: List["Item"]) -> None:
    print("===== 收集测试用例 start =====")
    for item in items:
        # 用例名称
        item.name = item.name.encode('utf-8').decode('unicode-escape')
        # 用例路径
        item._nodeid = item.nodeid.encode("utf-8").decode("unicode-escape")

    print("===== 收集测试用例 end =====")


def get_log(name: str=os.path.basename(__file__).split(".")[0]):
    """
    :param name: 默认获取当前运行py文件名
    """
    # 判断以当前时间命名的文件夹是否存在，不存在则新建
    if not os.path.exists(f"{cf.LOG_DIR}"):
        os.makedirs(f"{cf.LOG_DIR}")
    filepath = f"{cf.LOG_DIR}/{time.strftime('%Y-%m-%d')}"
    if not os.path.exists(filepath):
        os.makedirs(filepath)

    # 创建一个logger
    logger = logging.getLogger(name)
    logger.setLevel(logging.DEBUG)
    # 创建一个handler，用于写入日志文件
    log_name = f'{filepath}/{name}.log'

    # 如果logger.handlers列表为空则添加，否则直接去写日志
    if not logger.handlers:
        fh = logging.FileHandler(log_name)
        fh.setLevel(logging.INFO)

        # 再创建一个handler，用于输出到控制台
        ch = logging.StreamHandler()
        ch.setLevel(logging.INFO)

        # 定义handler的输出格式
        formatter = logging.Formatter(
            '%(asctime)s - %(filename)s - %(funcName)s - %(lineno)d - %(levelname)s - %(message)s', "%Y-%m-%d %H:%M:%S")
        fh.setFormatter(formatter)
        ch.setFormatter(formatter)

        # 给logger添加handler
        logger.addHandler(fh)
        logger.addHandler(ch)

    return logger
